iT邦幫忙

2024 iThome 鐵人賽

DAY 16
0
生成式 AI

Semantic Kernel 的魔力-用.NET探索生成式應用系列 第 16

Function Calling:圖解 Function Calling

  • 分享至 

  • xImage
  •  

Function Calling ,它允許大型語言模型(LLM)在生成回應過程中,能根據輸入的 prompt 動態呼叫預定義的 Function 來執行具體的操作,這個技術通常用於讓模型可以與外部系統進行互動,例如調用 API、查詢資料庫或進行某些計算等,這樣能夠讓 LLM 應用更具功能性和實用性。

要完成這項機制,其作業流程大致是 :

  1. 模型識別需求:模型根據輸入的 prompt,具有判斷是否需要呼叫 Function 來解決問題。
  2. Function調用:模型生成出 Function name 及參數 parameters。這些 Function 是預先由開發者開發好,並且依特定的格式產生定義Schema。例如 OpenAI 的 Function definitions schema 長的像這樣
{
    "name": "get_delivery_date",
    "description": "Get the delivery date for a customer's order. Call this whenever you need to know the delivery date, for example when a customer asks 'Where is my package'",
    "parameters": {
        "type": "object",
        "properties": {
            "order_id": {
                "type": "string",
                "description": "The customer's order ID.",
            },
        },
        "required": ["order_id"],
        "additionalProperties": false,
    }
}

這裡頭描述了這個 Function 具體用途、名稱、參數,這些資訊將會被包含在 system prompt 內容裡,提供給 LLM 模型。

  1. 查覺需要調用函數:當 LLM 模型在 Chat Message 中查覺需要 Function 來協助時,便會生成要調用的 Function name 以及 Function 參數值,而 Function 參數值也是從 Chat Message 內容中提取出來的,接著生成這些資訊,通常會是 json 格式。

  2. 執行函數:平台或框架接收著到上一步驟的生成資訊回應時,便會實際執行 Function,並取得 從而獲取外部資料或完成某項操作(取決於 Function 具體的程式邏輯)。

  3. 回傳結果給 LLM 模型:Function 執行結果會再回傳給 LLM 模型, LLM 模型接著可以根據取得的資訊最後再生成適當的回覆。

Function Calling 並不是 LLM 模型本身的「能力」

Function Calling 其實並不是 LLM 模型本身的能力,而是一種由開發者或平台在 LLM 周圍實現的外部機制,用來讓模型與外界進行互動。LLM 本質上是一個生成文本,接受 prompt 輸入後會生成對應的文本回應。而透過附加的中間層(如 API 或應用層的開發設計),可以引導模型識別出需要呼叫 Function 的情境,並讓其生成 Function Calling 所需要的資料,例如 Function name、parameters value。

實現這個情境有二個重要的組成:

  1. LLM 模型的輸出推理:根據prompt 輸入,生成建議的函數名稱參數值
  2. 外部架構處理:具驗實現函數執行的環境並不是LLM模型內部,而是外部系統,這些外部系統通常是 AI 服務平台提供的程式碼 run time 環境或是開發者建構出來的環境(例如依賴Semantic Kernel / LangChain 等),如此便能形成 LLM 模型可以用自然語言輸出的方式來間接控制外部 Function 的執行,看起來就好像是 LLM 模型會自已呼叫及執行 Function 一樣。

每個 LLM 模型都可以 Function Calling ?

通常來說 Function Calling 的能力取決於模型本身的設計以及框架如何與模型進行整合,這也意謂著並不是所有的 LLM 模型都具有適合 Function Calling的特性。最主要的原因在這一類的 LLM 模型必須具有能理解對 Function Calling 的認知識別,並能具體從 Chat Message 中提取參數值等資訊的能力。

那麼如果今天不使用 OpenAI 的平台服,而是使用其它模型但搭配著 LangChain 和 Semantic Kernel 這類框架,是否也能實現 Function Calling ? 當使用的模型並不是針對 Function Calling 而特別調整過的模型時,整合 LangChain 和 Semantic Kernel 的框架是有機會實現 Function Calling 的效果,但有可能在精確度上會有落差,例如明明應該要調用 Function 卻發現模型本身並未查覺,而未能生成 實現 Function Calling 所需要的資訊,因此還是會建議選擇其有實現 Function Calling 的模型會比較好。

圖解 Function Calling

https://ithelp.ithome.com.tw/upload/images/20240929/20126569VReNHXPAqC.png

這張圖描繪關於 Function Calling 的工作流程機制:

  1. Functions (藍色數字 1) : 表達的是具體的 Function 實作,在不同平台服務或框架中,又被稱為 Plugins、Tools 等。
  2. Platform (藍色數字 2) : 表達的是平台或框架,例如 OpenAI、LangChain、Semantic Kernel。
  3. LLMs (藍色數字 3) : 表達的是模型。

假設:今天要實現一個根據天氣資料提供穿搭建議的 LLM 應用

首先,這個應用會需一個 Function 應提供具體的天氣資訊,執行後能把天氣資訊給 LLM 模型,而 LLM 模型能據此生成最後的穿搭建議內容回覆使用者。根據這個需求,在這張圖的具體作業流程是:

  1. 紅色數字 1 :平台或框架將 Function 具體的描述結合在 system prompt中,提供給 LLM 模型。
  2. 紅色數字 2 :當 User prompt 要求提供穿搭建議時, LLM 模型根據需求認知需要 Function 協助,因此返回要調用的 Function name參數資訊。
  3. 紅色數字 3 :根據Function name參數資訊,由程式 run time 環境具體執行 Function。
  4. 紅色數字 4 :返回 Function 的執行結果給與平台或框架環境。
  5. 紅色數字 5 :根據對話上下文以及 Function 的執行結果,交由 LLM 模型。
  6. 紅色數字 6 : LLM 模型生成最終的文本。

結語

LLM 模型要能實現 Function Calling ,並非單靠模型本身或是平台/框架就能實現,而是需要建構一個協作執行的環境,這裡面涉及到相當程度的複雜性,因此通常有平台的支援是最方便實現的,例如:OpenAI,這時候再搭配像 LangChain、Semantic Kernel 再進一步延伸到 Agent 的實作,就能更快速及輕易的建構能力更強大的 LLM 應用。


上一篇
Function Calling:監看 Auto Function Calling
下一篇
AI Agent:認識 AI Agent
系列文
Semantic Kernel 的魔力-用.NET探索生成式應用30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言